/*
 * Rey.java
 *
 * Created on 19 de julio de 2007, 02:20 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ajedrezLogica;
import java.util.*;
import javax.swing.*;
/**
 *
 * @author Billy
 */
public class Rey extends Pieza{
    
    boolean yaEnroque= false;
    
    /** Creates a new instance of Rey */
    public Rey(String nombre, String posicion, JLabel laFigura) {        
        super(nombre, posicion, laFigura);
        System.out.println("::Tengo al Rey!!!:: ");     
    }

    public Rey(){
        super("","",null);
    }
   public boolean EstaenLista(String notacion){    
        for(int n=0; n < movimientosposibles.size(); n++){
            if(movimientosposibles.get(n).equals(notacion))
                return true;            
        }
    return false;
    }    
        
    public List<String> CalcularMovimientos(manejadorPiezas adminPiezas){
        char f , c;                    
        movimientosposibles = new ArrayList<String>();              

        for(int i=0; i<=8; i++){            
            f = posicion.charAt(0);        
            c = posicion.charAt(1);

            switch(i){
                case 0: /*Posicion de Enroque*/ /*Miercoles, 31 de octubre. 5:56pm. Y puedo vivir del amor*/
                        if(nombre.charAt(0)=='N' && adminPiezas.HayPiezaenCasilla("f8")== false && adminPiezas.HayPiezaenCasilla("g8")== false &&
                           /*adminPiezas.enroqueEfectuado()==false && adminPiezas.yamoviRey(this)== false &&*/
                           /*adminPiezas.yamoviTorreEnroqueCorto(this)==false &&*/ 
                           adminPiezas.damePieza("NegroTorre2").getVivo()==true){
                            ++f; ++f;   
                            if(f <='h'){
                                if(this.EstaenLista(aString(f,c))== false) movimientosposibles.add(aString(f,c)); 
                                System.out.println("Se puede hacer enroque Corto!!");                                                        
                            }                            
                        }  
                        
                        f = posicion.charAt(0);         
                        if(nombre.charAt(0)=='N' && adminPiezas.HayPiezaenCasilla("b8")== false && adminPiezas.HayPiezaenCasilla("c8")== false &&
                           adminPiezas.HayPiezaenCasilla("d8")== false && /* adminPiezas.enroqueEfectuado()==false && */
                           /*adminPiezas.yamoviRey(this)== false && adminPiezas.yamoviTorreEnroqueLargo(this)==false &&*/
                           adminPiezas.damePieza("NegroTorre1").getVivo()==true){

                            --f; --f;
                            if(f >='a'){
                                if(this.EstaenLista(aString(f,c))== false) movimientosposibles.add(aString(f,c)); 
                                System.out.println("Se puede hacer enroque Largo!!");                                                                                
                            }
                        }       
                     
                        /*Medianoche del Jueves 13 de septiembre del 2007. 1:20 am (viernes)*/
                        f = posicion.charAt(0);   
                        if(nombre.charAt(0)=='B' && adminPiezas.HayPiezaenCasilla("f1")== false && adminPiezas.HayPiezaenCasilla("g1")== false &&
                           /*adminPiezas.enroqueEfectuado()==false && adminPiezas.yamoviRey(this)== false &&*/
                           /*adminPiezas.yamoviTorreEnroqueCorto(this)==false &&*/ 
                           adminPiezas.damePieza("BlancoTorre2").getVivo()==true){                            
                           ++f; ++f;   
                           if(f <='h'){
                                System.out.println("!!!aString!!:: "+aString(f,c));   
                                if(this.EstaenLista(aString(f,c))== false){
                                    System.out.println("-------->>>");                                                            
                                    movimientosposibles.add(aString(f,c));
                                }                             
                           }
                           System.out.println("!!!Se puede hacer enroque Corto!!");                            
                        }  
                        /*..........................................................*/
                    
                        f = posicion.charAt(0);         
                        if(nombre.charAt(0)=='B' && adminPiezas.HayPiezaenCasilla("b1")== false && adminPiezas.HayPiezaenCasilla("c1")== false &&
                           adminPiezas.HayPiezaenCasilla("d1")== false && /* adminPiezas.enroqueEfectuado()==false && */
                           /*adminPiezas.yamoviRey(this)== false && adminPiezas.yamoviTorreEnroqueLargo(this)==false &&*/
                           adminPiezas.damePieza("BlancoTorre1").getVivo()==true){
                            --f; --f;
                            if(f >='a'){
                                if(this.EstaenLista(aString(f,c))== false) movimientosposibles.add(aString(f,c)); 
                                System.out.println("Se puede hacer enroque Largo!!");                                                                                
                            }
                        }     
                        
                        break;
                case 1: /*Posicion 1*/ 
                        f--;                        
                        if( f <'a') break;
                        c++;  
                        if( c > '8') break;
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                                     
                        }
                        else movimientosposibles.add(aString(f,c));                                    
                        break;
                        
                case 2: /*Posicion 2*/ 
                        c++; 
                        if( c > '8') break;
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                                    
                        }
                        else movimientosposibles.add(aString(f,c));                                                          
                        break;
                        
                case 3: /*Posicion 3*/ 
                        f++; 
                        if( f > 'h')break;
                        c++;      
                        if( c > '8')break;
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                                     
                        }
                        else movimientosposibles.add(aString(f,c));                                                                                    
                        break;
                        
                case 4: /*Posicion 4*/ 
                        f++;
                        if( f > 'h')break;                        
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                                  
                        }
                        else movimientosposibles.add(aString(f,c));                                                                                                             
                        break;
                        
                case 5: /*Posicion 5*/ 
                        f++;
                        if( f > 'h')break;                        
                        c--;         
                        if( c < '1')break;                        
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                                      
                        }
                        else movimientosposibles.add(aString(f,c));  
                        break;
                        
                case 6: /*Posicion 6*/ 
                        c--;         
                        if( c < '1')break;                        
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                                     
                        }
                        else movimientosposibles.add(aString(f,c));                                                                                                                                                              
                        break;
                        
                case 7: /*Posicion 7*/ 
                        f--;
                        if( f < 'a')break;                        
                        c--;  
                        if( c < '1')break;                                                
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                               
                        }
                        else movimientosposibles.add(aString(f,c));                                                                                                                                                          
                        break;
                        
                case 8: /*Posicion 8*/ 
                        f--; 
                        if( f < 'a')break;                                                
                        if(adminPiezas.HayPiezaenCasilla(aString(f,c))== true) {
                            agregarListaxComer(adminPiezas,f,c);                                   
                        }
                        else movimientosposibles.add(aString(f,c));                                                                                                                                                                                    
                        break;                        
            }                        
        }
       return movimientosposibles;          
    }    
}
